<?php
/**
 * CreateTime: 2023/6/29 15:48
 */
namespace App\Func;


use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Common\Type;
use App\Consts\ResponseConsts\ResponseStatusConsts;
use App\Models\File\FileModel;
use Illuminate\Support\Facades\Storage;

class ExcelFunc
{

    /**
     * 要使用这个方法 一定要安装 composer require box/spout
     * 因为windows上缺乏拓展 所以本地安不上
     * @param $fileId
     * @return array
     */
    public function readFirstRow($fileId)
    {
        $fileModel = new FileModel();
        $fileInfo = $fileModel->getFileById($fileId);

        if(!$fileInfo){
            return [
                'ok' => false,
                'msg' => '当前文件不存在'
            ];
        }
        // 校验文件类型
        if($fileInfo['file_ext']!='xlsx'){
            return [
                'ok' => false,
                'msg' => '文件类型错误'
            ];
        }


        $url = $fileInfo['file_url'];
        $res = Storage::path($url);
        if(!is_file($res)){
            return [
                'ok' => false,
                'msg' => '当前文件不存在'
            ];
        }
        $filePath = $res;

        $reader = ReaderEntityFactory::createReaderFromFile($filePath);
        $rowData = [];

        $reader->open($filePath);
        // 获取第一个表格（Sheet）
        $sheetIterator = $reader->getSheetIterator();
        $sheetIterator->rewind();  // 将指针移动到第一个表格

        if ($sheetIterator->valid()) {
            $sheet = $sheetIterator->current();
            $rowIterator = $sheet->getRowIterator();
            // 获取第一行数据
            $rowIterator->rewind();  // 将指针移动到第一行
            if ($rowIterator->valid()) {
                $firstRow = $rowIterator->current();
                // 遍历第一行的每个单元格，将其内容存入数组
                foreach ($firstRow->getCells() as $cell) {
                    $rowData[] = $cell->getValue();
                }
            } else {
                return [
                    'ok' => false,
                    'msg' => '表格格式错误缺少表1'
                ];
            }
        } else {
            return [
                'ok' => false,
                'msg' => '当前文件不存在'
            ];
        }
        // 关闭 Reader 对象
        $reader->close();
        return $rowData;
    }

}